/*
** $Id: llimits.h,v 1.69.1.1 2007/12/27 13:02:25 roberto Exp $
** Limits, basic types, and some other `installation-dependent' definitions
** See Copyright Notice in lua.h
*/

#ifndef llimits_h
#define llimits_h


#include <limits.h>
#include <stddef.h>


#include "lua.h"


typedef LUAI_UINT32	lu_int32;

typedef LUAI_UMEM lu_mem;


/* chars used as small naturals (so that 'char' is reserved for characters) */
typedef unsigned char lu_byte;


#define MAX_SIZET	((size_t)(~(size_t)0)-2)	/* (-2 for safety) */


#define MAX_INT (INT_MAX-2) /* maximum value of an int (-2 for safety) */


/*
** conversion of pointer to integer
** this is for hashing only; there is no problem if the integer
** cannot hold the whole pointer value
*/
#define IntPoint(p)	((unsigned int)(lu_mem)(p))


/* type to ensure maximum alignment */
typedef LUAI_USER_ALIGNMENT_T L_Umaxalign;


#ifdef lua_assert

#define check_exp(c, e)	(lua_assert(c), (e))

#else

#define lua_assert(c)	((void)0)
#define check_exp(c, e)	(e)

#endif


#ifndef cast
#define cast(t, exp)	((t)(exp))
#endif

#define cast_byte(i)	cast(lu_byte, (i))
#define cast_num(i) cast(lua_Number, (i))
#define cast_int(i)	cast(int, (i))


#endif
